package com.zjsru.plan2025.oneday;

/**
 * 80. 删除有序数组中的重复项 II
 *
 * @Author: cookLee
 * @Date: 2025-02-09
 */
public class RemoveDuplicates {

    /**
     * 主
     * \
     * 输入：nums = [1,1,1,2,2,3]
     * 输出：5, nums = [1,1,2,2,3]
     * 解释：函数应返回新长度 length = 5, 并且原数组的前五个元素被修改为 1, 1, 2, 2, 3。 不需要考虑数组中超出新长度后面的元素。
     * \
     * 输入：nums = [0,0,1,1,1,1,2,3,3]
     * 输出：7, nums = [0,0,1,1,2,3,3]
     * 解释：函数应返回新长度 length = 7, 并且原数组的前七个元素被修改为 0, 0, 1, 1, 2, 3, 3。不需要考虑数组中超出新长度后面的元素。
     * \
     *
     * @param args args
     */
    public static void main(String[] args) {
        RemoveDuplicates removeDuplicates = new RemoveDuplicates();
        int[] nums = new int[]{1, 1, 1, 2, 2, 2, 3};
        System.out.println(removeDuplicates.removeDuplicates(nums));
    }

    public int removeDuplicates(int[] nums) {
        //要求小于两次出现次数 前两个数可以直接掠过
        if (nums.length < 2) {
            return nums.length;
        }
        //模拟栈
        int stack = 2;
        for (int i = 2; i < nums.length; i++) {
            int curr = nums[i];
            //最大满足两次，前两次元素不同当前元素即可以模拟入栈
            if (nums[stack - 2] != curr) {
                //模拟入栈
                nums[stack] = curr;
                stack++;
            }
        }
        return Math.min(stack, nums.length);
    }

}
